//
//  TFDataSaveHandler.h
//  TFFoundation
//
//  Created by TFAppleWork-Summer on 2017/4/5.
//  Copyright © 2017年 TFAppleWork-Summer. All rights reserved.
//

#import <Foundation/Foundation.h>

extern NSString * _Nullable const kTFJsonObjectSaveDBName;///<保存的数据库名名字
extern NSString * _Nullable const kTFJsonObjectDefaultTableName;///<默认的表名字

/**
 jsonobject数据保存工具类
 */
@interface TFJsonObjectSaveHandler : NSObject

///=============================================================================
/// @name 自定义表中的操作
///=============================================================================

/**
 根据表的名字创建数据库

 @param tableNamesArray 表的名字数组
 @return 是否成功
 */
+ (BOOL)createSaveDatabaseWithTableNamesArray:(nonnull NSArray<NSString *> *)tableNamesArray;

/**
 根据key保存Json对象

 @param tableName 表名
 @param object 保存的对象，若对象为TFModel的子类，则会自动转换成对应的字典
 @param key 保存的key
 */
+ (BOOL)saveJsonObjectToTable:(nonnull NSString *)tableName object:(nonnull id)object key:(nonnull NSString *)key;

/**
 根据表名和key获取保存的Json对象

 @param tableName 表名
 @param key 保存的key
 @return 对应的保存的对象
 */
+ (nullable id)getJsonObjectFromTable:(nonnull NSString *)tableName key:(nonnull NSString *)key;

/**
 根据表名和key和转换的json数据模型获取表中保存的所有json对象
 
 @param tableName 表名
 @return 对应的保存的对象数组
 */
+ (nullable NSArray *)getAllJsonObjectsFromTable:(nonnull NSString *)tableName ;

/**
 根据表名和key和转换的json数据模型获取保存的Json对象，

 @param tableName 表名
 @param key 保存的key
 @param modelClass 转换的数据模型class，必须是TFModel的子类
 @return 对应的保存的对象
 */
+ (nullable id)getJsonObjectFromTable:(nonnull NSString *)tableName key:(nonnull NSString *)key convertToModelClass:(nonnull Class)modelClass;

/**
 根据表名和key和转换的json数据模型获取表中保存的所有json对象

 @param tableName 表名
 @param modelClass 转换的数据模型class，必须是TFModel的子类
 @warning 所有的对象必须都是modelClass所属的类型
 @return 对应的保存的对象数组
 */
+ (nullable NSArray *)getAllJsonObjectsFromTable:(nonnull NSString *)tableName convertToModelClass:(nonnull Class)modelClass;

/**
 移除表中的某一条Json对象

 @param tableName 表名
 @param key 保存的key
 @return 是否成功
 */
+ (BOOL)deleteJsonObjectInTable:(nonnull NSString *)tableName key:(nonnull NSString *)key;

/**
 清空某张表中的所有数据

 @param tableName 表名
 @return 是否成功
 */
+ (BOOL)deleteAllJsonObjectInTable:(nonnull NSString *)tableName;

///=============================================================================
/// @name 默认表中的操作
///=============================================================================

/**
 将json对象保存进默认的表中

 @param object 保存的对象，若对象为TFModel的子类，则会自动转换成对应的字典
 @param key 保存的key
 @return 是否成功
 */
+ (BOOL)saveJsonObjectToDefaultTableWithObject:(nonnull id)object key:(nonnull NSString *)key;

/**
 根据key从默认表中获取保存的Json对象

 @param key 保存的key
 @return 对应的保存的对象
 */
+ (nullable id)getJsonObjectFromDefaultTableWithKey:(nonnull NSString *)key;

/**
 根据key和转换的json数据模型从默认表中获取保存的Json对象

 @param key 保存的key
 @param modelClass 转换的数据模型class，必须是TFModel的子类
 @return 对应的保存的对象
 */
+ (nullable id)getJsonObjectFromDefaultTableWithKey:(nonnull NSString *)key convertToModelClass:(nonnull Class)modelClass;


/**
 移除默认表中的某一条Json对象

 @param key 保存的key
 @return 是否成功
 */
+ (BOOL)deleteJsonObjectInDefaultWithKey:(nonnull NSString *)key;

/**
 清空默认表中的所有数据

 @return 是否成功
 */
+ (BOOL)deleteAllJsonObjectInDefaultTable;

@end
